package cn.zhc.com.utils;

import android.support.annotation.NonNull;

import java.text.DecimalFormat;


public class UtilsNumber {

    /**
     * String 转化为数字
     * @param mString 需要转换为数字的String
     * @param type  目标类型 Integer或者是Double
     * @param defaultValue 目标类型 的缺省值
     * @param <T> T 目标类型的泛型限制为Number的子类
     * @return
     */
    public static <T extends Number> T String2Number(String mString,T type,@NonNull T defaultValue){
        try {
            if (type instanceof Integer){
                return (T)((Integer)Integer.parseInt(mString));
            }

            if (type instanceof Double){
                return (T)((Double)Double.parseDouble(mString));
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return defaultValue;
    }

    /**
     *
     * 0 一个数字
     * # 一个数字，不包括 0,注意：是整数第一位，小数最后一位
     * . 小数的分隔符的占位符
     * ; 分隔格式。
     * - 缺省负数前缀
     *
     */
    private static String[] pointLength = {"#0","#0.0","#0.00","#0.000","#0.0000"};

    /**
     *
     * @param source String或者是数字类型
     * @param savePointLength 指定保留小数点位数 pointLength[]
     * @param <T>
     * @return
     */
    public static <T> String toDouble(T source,int savePointLength) {
        double d = 0;
        try {
            if (source instanceof String){
                d = Double.parseDouble((String) source);
            }else{
                d = (Double) source;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        DecimalFormat decimalFormat = new DecimalFormat(pointLength[savePointLength]);
        return decimalFormat.format(d);
    }
}
